package com.blumov.fastbox.infrastructure.persistence.largequery;

import java.util.List;


/**
 * a Large Query Object <br>
 * cada quien es responsable de realizar una implementacion acorde <br>
 * 
 * @author epidata
 *
 */
public interface LargeQuery<T> {

	/**
	 * lista los resultados contenidos en esa pagina
	 * 
	 * @param thisPage
	 * @return
	 */
	List<T> list(Page thisPage);

	/**
	 * Calcula la cantidad total de registros <br>
	 * que devuelve el query object. <br>
	 * cualquier implementacion debe tener en cuenta el costo de perfomance <br>
	 * que acarrea contar la cantidad total de registros <br>
	 * por eso se <b>deberia</b> contar una sola vez y luego almacenar el resultado. <br>
	 * sucesivas invocaciones regresara el valor almacenado. <br>
	 * 
	 * @return aInteger con la cantidad total de registros
	 */
	Integer countRows();

}
